//
//  HFAutoview.swift
//  HFWeChat
//
//  Created by 黄来峰 on 16/4/18.
//  Copyright © 2016年 itcast. All rights reserved.
//https://api.weibo.com/oauth2/authorize
//App key：3596973820
//App secret：9e1b745cbf51128b2073f68d6de8fb11
//client_id	true	string	申请应用时分配的AppKey。
//redirect_uri	true	string	授权回调地址，站外应用需与设置的回调地址一致，站内应用需填写canvas page的地址。

import UIKit
import SVProgressHUD
import AFNetworking


class HFAutoview: UIWebView {
    
    

    override init(frame: CGRect) {
        super.init(frame: frame)
        delegate = self
        self.backgroundColor = UIColor.whiteColor()
        
        loadNetData("https://api.weibo.com/oauth2/authorize?client_id=\(APPKEY)&redirect_uri=\(REDIRECT_UTI)")
        
        
//        loadNetData("https://api.weibo.com/oauth2/authorize?client_id=3596973820&redirect_uri=https://www.baidu.com")
       
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    private func loadNetData(url: String){
    
        let url: NSURL = NSURL(string: url)!
//        print(url)
        let request = NSURLRequest(URL: url)
        loadRequest(request)
    }
}
extension HFAutoview: UIWebViewDelegate{

    func webViewDidStartLoad(webView: UIWebView) {
        SVProgressHUD.show()
//        SVProgressHUD.displayDurationForString("正在拼命加载中...")
        
    }
    
    
    func webViewDidFinishLoad(webView: UIWebView) {
        SVProgressHUD.dismiss()
        
    }
    
    
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
       
       
//        print("请求的url\(url)")
        if let url = request.URL?.absoluteString where  url.hasPrefix(REDIRECT_UTI){
        
            if let urlCode = request.URL?.query{
            
            let code = urlCode.substringFromIndex("code=".endIndex)
//                print(code)
            getUserAccount(code)
            }
        
        }
        
        return true
    }

}
 //MARK: -HFAutoview的分类，用来请求数据
extension HFAutoview{
    
//    必选	类型及范围	说明
//    client_id	true	string	申请应用时分配的AppKey。
//    client_secret	true	string	申请应用时分配的AppSecret。
//    grant_type	true	string	请求的类型，填写authorization_code
//    
//    grant_type为authorization_code时
//    必选	类型及范围	说明
//    code	true	string	调用authorize获得的code值。
//    redirect_uri	true	string	回调地址，需需与注册应用里的回调地址一致。
//
     //MARK: -请求accesstoken
    func getUserAccount(code: String){
        let urlString = "https://api.weibo.com/oauth2/access_token"
        let params = [
            "client_id":"\(APPKEY)",
            "client_secret":"\(APP_SECRET)",
            "grant_type":"authorization_code",
            "code":code,
            "redirect_uri":"\(REDIRECT_UTI)"
        ]
        
        let tools = HFNetWorkTools.sharedTools
        tools.request(.POST, urlString: urlString, params: params) { (response, error) -> () in
            if response != nil {
             //使用下面的打印可以查看答应的数据类型
//                print(response?.classForCoder)
                
                //面向model开发，所以需要字典转模型
                let accountModel = HFUserAccountModel(dict: response as! [String: AnyObject])
                
//                print(accountModel)
                self.getUserInfo(accountModel)

            }else{
                
                print(error)
            }
        }
   
        
        
         //MARK: - 使用这种方式对返回的数据进行输出查看数据类型
        
//        tools.responseSerializer = AFHTTPResponseSerializer()
//        tools.POST(urlString, parameters: params, progress: nil, success: { (_, response) -> Void in
//            //将二进制数据装化成字符串数据
//            let jsonStr = NSString(data: response as! NSData, encoding: NSUTF8StringEncoding)
//            print(jsonStr)
//            
//            
//
//            
//            }) { (_, error) -> Void in
//                
//        }
        
        
    }

}
extension HFAutoview{
    
    //MARK: -获取用户信息的方法
    
    /**
    用来获取用户信息的函数
    - parameter accountModel: 模型参数
    -see [https://api.weibo.com/2/users/show.json](https://api.weibo.com/2/users/show.json)
    */
    
    
    //参数:
    //access_token	true	string	采用OAuth授权方式为必填参数，OAuth授权后获得。
    //uid	false	int64	需要查询的用户ID。
    


    func getUserInfo(accountModel: HFUserAccountModel){
        let urlString = "https://api.weibo.com/2/users/show.json"
        let params:[String: AnyObject] = [
            "access_token":accountModel.access_token!,
            "uid":accountModel.uid!
        ]
        //获取网络请求管理类
        let getUserTool = HFNetWorkTools.sharedTools
        getUserTool.request(.GET, urlString: urlString, params: params) { (response, error) -> () in
            guard  let dataDict = response as? [String: AnyObject] else{
                
                print(error)
                return
            }
            
            //在这里写赋值的代码--对account 的头像和昵称赋值
            accountModel.profile_image_url = dataDict["profile_image_url"] as? String
            accountModel.screen_name = dataDict["screen_name"] as? String

            //对用户数据进行保存
            HFUserAccountTools.sharedTools.saveUserAccount(accountModel)
            
             //发送通知让控制器将自动登录界面
        NSNotificationCenter.defaultCenter().postNotificationName("DISMISSAUTOLOGINCONTROLLER", object: nil)
            //发送通知切换根视图
         NSNotificationCenter.defaultCenter().postNotificationName(SWITCHDEFAULTVC, object: nil)
           
            
        }
    }





}


